맨위로가기

뱅크 전환

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

뱅크 전환은 프로세서의 주소 공간을 확장하기 위해 일부 레지스터를 사용하여 메모리 뱅크를 전환하는 기술이다. 16비트 프로세서가 64KB 이상의 메모리를 사용하도록 하거나, 마이크로컨트롤러에서 여러 구성 레지스터에 접근하는 데 활용되었다. 초기 비디오 게임 콘솔과 홈 컴퓨터에서 널리 사용되었으며, IBM PC의 확장 메모리(EMS) 구현에도 기여했다. 뱅크 전환은 CPU의 주소 공간 외에 페이지 전환용 레지스터가 필요하고, 소프트웨어 관리가 필요하다는 단점이 있다. 한국에서는 8비트 컴퓨터 시대와 PC-9801 호환 기종에서 뱅크 전환 기술이 사용되었다.

더 읽어볼만한 페이지

  • 메모리 관리 - 동적 메모리 할당
    동적 메모리 할당은 프로그램 실행 중 힙 영역에서 메모리 공간을 확보 및 해제하여 효율적인 메모리 관리와 유연성을 제공하는 기술로, 메모리 누수 방지 및 가비지 컬렉션 등의 고려 사항이 중요하며 C, C++, C++/CLI, C# 등에서 사용된다.
  • 메모리 관리 - 정적 변수
    정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다.
  • 컴퓨터 메모리 - 플래시 메모리
    플래시 메모리는 전기적으로 데이터의 쓰기 및 삭제가 가능한 비휘발성 메모리 기술로, 마스오카 후지오 박사가 발명하여 카메라 플래시와 유사한 소거 방식으로 인해 명명되었으며, NOR형과 NAND형으로 나뉘어 각기 다른 분야에 적용된다.
  • 컴퓨터 메모리 - 메모리 계층 구조
    메모리 계층 구조는 CPU 데이터 접근 속도 향상을 위해 레지스터, 캐시, RAM, 보조 기억 장치 등으로 구성되며, 속도, 용량, 비용이 다른 계층들을 통해 효율적인 메모리 관리를 가능하게 한다.
뱅크 전환
뱅크 전환
정의뱅크 전환(bank switching)은 컴퓨터 아키텍처에서 사용 가능한 것보다 더 많은 메모리에 접근할 수 있도록 하는 기술이다. 이는 메모리를 뱅크라고 하는 개별 블록으로 나누고 한 번에 하나의 뱅크만 CPU에 매핑함으로써 달성된다.
작동 방식
메모리 뱅크메모리 뱅크는 개별적으로 활성화하거나 비활성화할 수 있는 메모리의 블록이다.
CPU 매핑CPU는 한 번에 하나의 메모리 뱅크에만 액세스할 수 있다.
뱅크 전환뱅크 전환은 CPU에 매핑된 메모리 뱅크를 변경하는 프로세스이다.
주소 공간 확장뱅크 전환을 통해 시스템은 CPU가 직접 처리할 수 있는 것보다 훨씬 더 많은 메모리를 가질 수 있다.
I/O 포트 사용뱅크 전환은 일반적으로 I/O 포트에 특정 값을 써서 수행되며, 이는 메모리 관리 하드웨어에 어떤 뱅크를 활성화할지 지시한다.
활용
과거뱅크 전환은 8비트 마이크로컴퓨터 시대에 매우 일반적이었다. 이러한 시스템은 일반적으로 64KB의 RAM으로 제한되었지만 뱅크 전환을 통해 훨씬 더 많은 메모리를 사용할 수 있다.
예를 들어 코모도어 64는 뱅크 전환을 사용하여 64KB 이상의 RAM에 액세스할 수 있었다.
현대뱅크 전환은 여전히 일부 임베디드 시스템에서 사용된다.
또한 x86 아키텍처의 PAE와 유사한 방식으로 64비트 아키텍처에서 32비트 애플리케이션이 4GB 이상의 메모리를 사용할 수 있도록 하는 데 사용될 수 있다.
또한 그래픽 카드는 빠른 메모리 액세스를 위해 뱅크 전환과 유사한 기술을 사용한다.
기타뱅크 전환은 복잡성을 추가하지만 시스템이 더 많은 메모리를 처리할 수 있게 해준다.
장점
확장된 메모리 용량CPU가 직접 주소 지정할 수 있는 것보다 더 많은 메모리를 사용할 수 있다.
비용 효율성더 많은 메모리를 지원하기 위해 더 비싼 CPU 또는 메모리 컨트롤러가 필요하지 않다.
단점
복잡성 증가뱅크 전환을 구현하고 관리하려면 추가적인 하드웨어 및 소프트웨어 복잡성이 필요하다.
성능 오버헤드뱅크를 전환하는 데 시간이 걸리므로 특정 작업에서 성능이 저하될 수 있다.
프로그래밍 복잡성프로그래머는 메모리가 뱅크로 구성되어 있다는 것을 알고 있어야 하며, 뱅크 간에 데이터를 이동하는 코드를 작성해야 할 수 있다.
같이 보기
관련 기술페이지 주소 확장
메모리 관리 장치

2. 기술적 원리

뱅크 전환은 프로세서 명령어의 주소 공간을 확장하는 방법 중 하나이다. 예를 들어, 12비트 주소를 가진 프로세서의 후속 시스템[1]이 15비트 주소 버스를 가지지만 상위 3비트를 직접 지정할 수 없는 경우, 내부 뱅크 레지스터를 사용하여 이 비트들을 제공할 수 있다. 비슷한 예로, 15비트 주소를 가진 프로세서의 후속 시스템[2]이 18비트 주소 버스를 가지지만, 레거시 명령어는 15비트 주소 비트만 가지고 있을 때도 내부 뱅크 레지스터가 해당 비트를 제공하며, 일부 새로운 명령어는 뱅크를 명시적으로 지정할 수 있다.

16비트 외부 주소 버스를 가진 프로세서는 216 = 65536개의 메모리 위치만 주소 지정할 수 있다. 시스템에 외부 래치를 추가하면, 각각 65536개의 주소를 가진 두 세트의 메모리 장치 중 어느 것에 접근할지 제어할 수 있다. 프로세서는 래치 비트를 설정하거나 지워 현재 사용 중인 메모리 세트를 변경할 수 있다.[2] 래치는 특정 메모리 주소 디코딩, 별도로 디코딩된 I/O 주소를 가진 프로세서의 출력 주소 디코딩 등 여러 방법으로 설정/해제될 수 있다. 여러 뱅크 전환 제어 비트를 레지스터에 모아 레지스터의 각 추가 비트마다 사용 가능한 메모리 공간을 약 두 배로 늘릴 수 있다.

외부 뱅크 선택 래치(또는 레지스터)는 프로세서의 프로그램 카운터와 직접 연결되지 않아 프로그램 카운터 오버플로 시 자동 상태 변경이 되지 않는다. 프로그램 카운터는 프로세서 내부 레지스터이므로 외부 래치가 감지할 수 없다. 추가 메모리는 프로그램에서 원활하게 사용될 수 없으며, 프로세서는 대용량 메모리 객체 접근을 위해 명시적으로 뱅크 전환 작업을 수행해야 한다.

2. 1. 뱅크 전환의 작동 방식

뱅크 전환 시스템은 일반적으로 모든 뱅크에 공통인 프로그램 메모리 블록을 가진다. 이 공통 영역은 주소 공간의 일부에 대해 메모리 위치의 단일 세트만 사용되는데, 뱅크 간 전환 관리 코드를 보관하고 인터럽트를 처리하는 데 사용된다.[2]

데이터베이스가 여러 뱅크에 걸쳐 있는 경우, 뱅크 간 데이터 이동은 공통 메모리 영역을 거쳐야 한다. 예를 들어, 한 번에 하나의 뱅크만 접근 가능한 경우, 각 바이트는 먼저 공통 메모리 영역으로 이동한 다음, 대상 뱅크로 전환 후, 마지막으로 대상 뱅크로 이동해야 한다. 이 과정은 두 번의 이동을 필요로 한다. 그러나, 컴퓨터 아키텍처에 DMA 엔진 또는 두 번째 CPU가 있고 뱅크 접근 제한이 다른 경우, 하위 시스템을 통해 뱅크 간 데이터 직접 전송이 가능하다.

가상 메모리 방식과 달리, 뱅크 전환은 실행 중인 프로그램이나 운영 체제에서 명시적으로 관리해야 한다. 프로세서 하드웨어는 현재 활성 뱅크에 매핑되지 않은 데이터가 필요한지 자동으로 감지할 수 없다. 따라서 응용 프로그램은 필요한 데이터가 어떤 메모리 뱅크에 있는지 추적하고, 해당 뱅크를 활성화하기 위해 뱅크 전환 루틴을 호출해야 한다. 그러나 뱅크 전환은 디스크 저장소에서 데이터를 검색하는 것보다 훨씬 빠르게 데이터에 접근할 수 있다.

과거에는 주소 공간을 2차원 배열로 만드는 방식이 자주 사용되었다. 예를 들어, 16비트 주소 버스를 가진 시스템에서 주소 0xc000부터 0xffff번지를 뱅크 전환하여 두 개의 뱅크를 사용하면, 49152 + 16384 × 2 = 81920 워드를 처리할 수 있었다. 이 기법은 자기 코어 메모리와 롬 뱅크 전환, 주소선 절약에 사용되었다. 8비트 컴퓨터에서는 주기억 용량을 확보하면서 최대 메인 메모리 공간에 필적하는 VRAM 주소 공간[6]이나 텍스트 VRAM에 CPU가 접근할 수 있도록 하는 데 사용되었다. 또한, 메인 메모리를 64KB 탑재한 8비트 컴퓨터에서 초기 로더로부터 로드한 시스템으로 전환하거나, 쓰기 불가능한 롬 공간을 램(RAM)으로 사용자에게 개방하기 위한 전환 등에도 사용되어, 미리 구현된 롬에 기록된 것 이외의 시스템 이용이나, 보다 자유도가 높은 이용을 가능하게 했다.

2. 2. 가상 메모리와의 비교

가상 메모리 방식과 달리 뱅크 전환은 실행 중인 프로그램이나 운영 체제에서 명시적으로 관리해야 한다. 프로세서 하드웨어는 현재 활성 뱅크에 매핑되지 않은 데이터가 필요한지 자동으로 감지할 수 없다. 응용 프로그램은 필요한 데이터 조각이 어떤 메모리 뱅크에 있는지 추적한 다음, 뱅크를 활성화하기 위해 뱅크 전환 루틴을 호출해야 한다. 그러나 뱅크 전환은 디스크 저장소에서 데이터를 검색하는 것보다 훨씬 빠르게 데이터에 접근할 수 있다.

가상 메모리가 보급되면서 단순한 뱅크 전환 기구는 쇠퇴했다. 가상 메모리에서는 논리 주소 공간을 페이지 또는 세그먼트라고 불리는 작은 단위로 분할하고, 각각을 주소 변환 기구에서 물리 주소에 연결한다. 현재 구현에서는 주소 공간은 프로세스·페이지 또는 세그먼트·논리 주소 오프셋으로 구성되는 3차원 희소 배열이 된다 (가상 머신 모니터를 사용하는 경우에는 4차원 희소 배열). 원리적으로는 뱅크 전환의 발전형이지만, 가상 메모리를 뱅크 전환이라고 부르지는 않는다.

뱅크 전환에서는 CPU 주소 외에 페이지 전환용 레지스터가 필요하다. 이 레지스터는 적어도 논리적(소프트웨어적)으로는 CPU 외부에 있는 것이 일반적이다(HD64180처럼 CPU 칩 내부에 이 페이지 전환용 레지스터를 가진 칩도 있었지만, 프로그래밍상으로는 CPU 내부 레지스터로 취급되지 않았다).[7]

이는 주소를 CPU 내부 레지스터와 페이지 전환용 레지스터 두 곳에서 별도로 관리해야 함을 의미한다. CPU 내부 레지스터에서 페이지 레지스터로 자리 올림 등이 하드웨어로 구현되지 않기 때문에, 배열 등이 페이지 크기보다 큰 경우에는 소프트웨어로 페이지를 관리해야 했다.[8]

이는 소프트웨어 처리가 필요한 만큼 1차원 주소 관리보다 속도가 저하되며, 소프트웨어가 필요하다는 것은 해당 소프트웨어에 버그가 숨어있을 가능성이 있다는 것으로, 시스템의 신뢰성 저하를 야기했다.

이러한 버그의 예로, 한 덩어리의 데이터가 페이지 경계에 배치되는 경우가 있다. 이는 크기가 2n 바이트가 아닌 구조체의 배열이 전체적으로 페이지 크기를 초과한 경우 등에 발생한다.

또한, 대량의 데이터를 메모리 간에 전송할 경우, 뱅크 전환을 하면서 전송하는 처리가 필요했지만, 이 처리는 상당히 번거로웠다.

뱅크 전환용 레지스터의 사양(접속된 I/O 주소 등)은 CPU가 동일하더라도, 일반적인 경우 기종마다 달랐기 때문에, 동일 CPU이면서 비호환이 되는 원인 중 하나가 되었다.

단순한 뱅크 전환의 경우, 실행 코드의 위치가 제한되었다. 예를 들어, VRAM이 나타나는 주소에 그림을 그리는 처리를 두는 것은, VRAM이 배타적으로 해당 주소의 메인 메모리 대신 그 위치에 나타나게 되므로 불가능하다. 마찬가지로, 뱅크 전환으로 구현된 ROM의 루틴을 호출하기 위해서는, 이를 호출하는 프로그램 자체가 존재하는 장소 이외의 페이지에, 해당 처리의 ROM을 접속한 후 처리해야 한다.

3. 마이크로컴퓨터에서의 활용

Cromemco는 뱅크 전환을 사용한 최초의 마이크로컴퓨터 제조업체 중 하나로, 시스템에서 8개의 64KB 뱅크를 지원했다. 초기 비디오 게임 콘솔과 홈 컴퓨터에서 일반적으로 사용되는 16비트 주소 지정(8080, Z80, 6502, 6809 등)을 가진 프로세서는 64 KB만 직접 주소 지정할 수 있었다. 더 많은 메모리를 가진 시스템은 주소 공간을 더 큰 주소 공간의 일부에 동적으로 매핑할 수 있는 여러 블록으로 나누어야 했다.

1983년에 출시된 CP/M-80 3.0과 Z80 기반 TRS-80s의 Model 4 및 Model II는 8080 또는 Z80 프로세서가 주소 지정할 수 있는 64KB 이상의 메모리를 사용할 수 있도록 뱅크 전환을 지원했다. 뱅크 전환을 사용하면 더 넓은 주소 버스를 가진 프로세서로 전환하는 비용과 비호환성 없이 컴퓨터 디자인에 추가 메모리와 기능을 추가할 수 있었다.

예를 들어, C64는 전체 64KB의 RAM을 사용할 수 있도록 하면서 ROM과 메모리 맵 I/O도 제공하기 위해 뱅크 전환을 사용했다. Atari 130XE는 두 개의 프로세서(6502 및 ANTIC)가 별도의 RAM 뱅크에 접근할 수 있도록 하여 프로그래머가 CPU에 보이는 메모리를 사용하지 않고도 큰 플레이필드와 기타 그래픽 객체를 만들 수 있게 했다.

Z80이나 6502와 같은 8비트 마이크로프로세서에서는 메모리 주소가 16비트로 표현되므로 최대 64KB의 메모리 공간밖에 접근할 수 없었다. 따라서 64KB 이상의 메모리를 탑재하는 8비트 시스템에서는 메모리를 64KB 공간을 여러 뱅크(또는 페이지)로 분할하여 사용했다. 즉, 동시에 접근할 수 있는 메모리 공간은 여전히 64KB이지만, 뱅크를 전환함으로써 그 이상의 메모리를 사용할 수 있게 되었다.

과거에 자주 사용되던 유형은 주소 공간을 2차원 배열로 만드는 것이었다. 예를 들어 주소 버스가 16비트밖에 없고 전혀 개선되지 않은 경우, 주소 공간은 65536워드밖에 사용할 수 없었다. 그래서 예를 들어 주소 0xc000번지부터 0xffff번지를 뱅크 전환하여 두 개의 요소를 갖도록 하면, 49152+16384×2=81920워드를 처리할 수 있게 된다. 이 기법은, 옛날에는 자기 코어 메모리와 롬 뱅크를 전환하여, 주소선을 절약하는 데 사용되었다. 8비트 컴퓨터에서는 최대 메인 메모리 공간에 필적하는 VRAM의 주소 공간[6]이나 텍스트 VRAM 등을, 주기억 용량을 확보하면서 CPU에서 접근시키기 위해 사용되었다. 또한, 메인 메모리를 64KB 탑재한 8비트 컴퓨터에서 초기 로더로부터 로드한 시스템으로의 전환, 쓰기 불가능한 롬 공간을 램(RAM)으로 사용자에게 개방하기 위한 전환 등에도 사용되었다.

가상 메모리의 보급으로 단순한 뱅크 전환 기구는 쇠퇴했다.

그 후, MB-S1이나 FM-77, MZ-2500에서는 메모리를 페이지 단위로 공간에 할당하는 원시적인 메모리 관리 유닛이 내장되면서, 보다 자유롭게 배치할 수 있게 되었다. 앞서 언급한 MSX에서도, 고정되어 있던 주소나 조합의 제한 등을 회피하기 위해, MSX2에서 메모리 맵퍼라는 구조가 추가되었다.

1982년에 출시된 최종 버전의 CP/M에서는, 8080이나 Z80에서 64KB 이상의 메모리를 사용할 수 있도록 뱅크 전환을 지원했다[9]。 뱅크 전환은 초기 게임기에서도 사용되었다.[10] 예를 들어 아타리 2600은 4KB까지의 ROM만 액세스할 수 있었기 때문에, 롬 카트리지 내에 독자적인 뱅크 전환 하드웨어를 내장하여 4KB 이상의 ROM을 사용한 정교한 게임을 실현했다.[11]

패밀리 컴퓨터에는 본래 뱅크 전환 기능이 없었으며, ROM 카트리지 측에 컨트롤러(가상 롬 컨트롤러 등)를 탑재함으로써 뱅크 전환이 이루어졌다. 패밀리 컴퓨터는 원래 처리할 수 있는 용량이 적었고, 디스크 시스템의 등장으로 ROM 카트리지는 종료될 예정이었다. 그러나 뱅크 전환을 통해 대용량 ROM 카트리지를 다루는 기법이 확립되자, 읽기 속도가 느린 디스크 시스템이 점차 쇠퇴하여, 최종적으로는 디스크보다 카트리지가 더 대용량이 되었다. 게임보이의 카트리지에는 MBC (Memory Bank Controller)라는 칩이 사용되었으며, ROM 뱅크 전환뿐만 아니라, 카트리지 내의 SRAM 뱅크 전환이나 적외선 링크 등의 주변 기기 액세스도 제공했다.

4. 마이크로컨트롤러에서의 활용

마이크로컨트롤러(칩 내에 입출력 하드웨어가 통합된 마이크로프로세서)는 뱅크 전환을 사용하여 여러 구성 레지스터 또는 온칩 읽기/쓰기 메모리에 접근할 수 있다. 예를 들어, PIC 마이크로컨트롤러는 뱅크 전환을 통해 명령어 단어 길이를 줄여 공간을 절약한다. 단, 시작 시 시스템 구성을 위해 사용되는 레지스터와 같이 비교적 드물게 사용되는 레지스터에 접근하기 위해 추가적인 명령어가 필요하다는 단점이 있다.

읽기 뱅크와 쓰기 뱅크를 별도로 지정할 수 있도록 하여 입력과 출력을 같은 주소에서 수행하고, 출력 데이터의 보존과 주소 계산을 생략하는 방식이 고안되었다(리드 모디파이 라이트]). 이것은 이미지 처리에도 응용되었다.

5. IBM PC에서의 확장 메모리 (EMS)

1985년, 로터스인텔MS-DOS를 실행하는 IBM PC 호환 기종 컴퓨터에서 사용할 수 있도록 확장 메모리 사양(EMS) 3.0을 도입했다. 마이크로소프트는 1986년 버전 3.2와 1987년 버전 4.0에 참여했으며, 이 사양은 로터스-인텔-마이크로소프트 EMS 또는 LIM EMS로 알려지게 되었다. 이는 원래 IBM PC 아키텍처에서 정의된 640KB 이상의 RAM을 허용하는 뱅크 전환 기술의 한 형태로, 상위 메모리 영역에 위치한 64KB "창"에 조각별로 표시되도록 한다. 64KB는 각각 독립적으로 전환할 수 있는 16KB "페이지" 4개로 나뉜다. 일부 컴퓨터 게임에서 이를 사용했으며, EMS는 더 이상 사용되지 않지만, 이 기능은 오늘날 나중에 나온 마이크로소프트 윈도우 운영 체제에서 이러한 프로그램과의 하위 호환성을 제공하기 위해 에뮬레이터로 에뮬레이션된다.

인텔 8086 아키텍처에서는 주소 공간이 1메가바이트밖에 없었기 때문에, EMS라고 불리는 메모리 관리 방식이 고안되었다. 1988년, 로터스, 인텔, 마이크로소프트MS-DOS를 탑재한 PC/AT 호환기종에서 사용하는 EMS의 사양에 대해 합의했다.[13][14][8] 이는 Upper Memory Area라고 불리는 메모리 공간의 일부를 확장하여, 더 많은 메모리 자원에 접근하게 하기 위한 메커니즘이다.[15] 이것은 널리 보급되었고, 프로세서의 세대가 바뀌어 인텔 80286 이후와 같이 MMU가 탑재되게 된 이후에도 계속 사용되었다 (사치스럽게도 MMU는 단순한 뱅크 전환 컨트롤러로 사용되었다). EMS의 사양은 호환성을 유지하기 위해 이후의 Microsoft Windows에서도 에뮬레이트되어 지원되었다.

나중에 나온 확장 메모리 사양 (XMS) 역시 현재는 사용되지 않지만, MS-DOS가 실행되는 x86 프로세서의 실제 모드에서 직접 주소 지정할 수 없는 1MB 이상의 메모리("확장 메모리"라고 함)에 대해 뱅크 전환을 시뮬레이션하는 표준이다. XMS를 사용하면 확장 메모리를 일반 메모리의 어디든 복사할 수 있으므로 "뱅크"의 경계가 고정되지 않지만, 이를 사용하는 프로그램의 관점에서 볼 때 다른 모든 면에서 EMS의 뱅크 전환과 동일하게 작동한다. MS-DOS의 이후 버전(약 버전 5.0부터 시작)에는 XMS를 사용하여 EMS 메모리를 시뮬레이션하는 EMM386 드라이버가 포함되어 있어, EMS를 위해 작성된 프로그램이라도 확장 메모리를 사용할 수 있게 되었다. 마이크로소프트 윈도우 또한 이를 필요로 하는 프로그램들을 위해 XMS를 에뮬레이션한다.

6. 비디오 게임 콘솔에서의 활용

아타리 2600은 4KB의 ROM만 사용할 수 있었지만, 이후 출시된 2600 게임 카트리지에는 자체 뱅크 전환 하드웨어가 포함되어 더 많은 ROM을 사용할 수 있게 되었다. 이를 통해 더 많은 프로그램 코드와 그래픽, 다양한 게임 스테이지와 같은 게임 데이터를 활용하여 더욱 정교한 게임을 개발할 수 있었다.

닌텐도 엔터테인먼트 시스템(NES)에는 수정된 6502 프로세서가 탑재되었지만, 카트리지는 때때로 메가비트 이상의 ROM을 포함했으며, 이는 Multi-Memory Controller라고 하는 뱅크 전환을 통해 주소 지정되었다.

게임보이 카트리지는 MBC(메모리 뱅크 컨트롤러)라는 칩을 사용했다. MBC는 ROM 뱅크 전환뿐만 아니라 카트리지 SRAM 뱅크 전환, 적외선 링크 또는 진동 모터와 같은 주변 장치에 대한 접근도 제공했다.

슈퍼 스트리트 파이터 II와 같은 여러 세가 메가 드라이브 카트리지는 크기가 4MB를 초과하여 뱅크 전환 기술을 사용해야 했다(4MB는 최대 주소 크기).

7. 비디오 처리에서의 더블 버퍼링

일부 유형의 컴퓨터 비디오 디스플레이에서는 더블 버퍼링이라는 관련 기술을 사용하여 비디오 성능을 향상시킬 수 있다. 이 경우, 프로세서가 물리적 메모리 위치의 한 세트 내용을 업데이트하는 동안, 비디오 생성 하드웨어는 두 번째 세트의 내용을 액세스하여 표시한다. 프로세서가 업데이트를 완료하면, 비디오 디스플레이 하드웨어에 활성 뱅크를 전환하도록 신호를 보내 화면에서 보이는 전환이 아티팩트나 왜곡 없이 이루어지도록 할 수 있다. 이 경우, 프로세서는 한 번에 모든 메모리에 접근할 수 있지만, 비디오 디스플레이 하드웨어는 비디오 메모리의 일부 사이에서 뱅크 전환을 수행한다. 두 개 (또는 그 이상)의 비디오 메모리 뱅크가 약간 다른 이미지를 포함하고 있다면, 이들 사이를 빠르게 전환(페이지 플리핑)하여 프로세서가 직접 수행하기에는 너무 느릴 수 있는 애니메이션이나 기타 시각 효과를 만들 수 있다.

읽기 뱅크와 쓰기 뱅크를 별도로 지정할 수 있도록 하여 입력과 출력을 같은 주소에서 수행하고, 출력 데이터의 보존과 주소 계산을 생략하는 방식이 고안되었다([Read Modify Write 리드 모디파이 라이트]). 이것은 이미지 처리에도 응용되었다.

8. 뱅크 전환의 한계와 대안

뱅크 전환은 실행 중인 프로그램이나 운영 체제에서 명시적으로 관리해야 했다. 프로세서 하드웨어는 현재 활성 뱅크에 매핑되지 않은 데이터가 필요한지 자동으로 감지할 수 없었다. 응용 프로그램은 필요한 데이터 조각이 어떤 메모리 뱅크에 있는지 추적한 다음, 뱅크를 활성화하기 위해 뱅크 전환 루틴을 호출해야 했다. 그러나 뱅크 전환은 디스크 저장소에서 데이터를 검색하는 것보다 훨씬 빠르게 데이터에 접근할 수 있다는 장점이 있었다.

뱅크 전환은 서브루틴 호출, 인터럽트, 스택 처리 등에 주의해야 했으며, 소프트웨어적으로 페이지를 관리해야 하는 번거로움이 있었다. 예를 들어, 한 덩어리의 데이터가 페이지 경계에 배치되는 경우, 크기가 2n 바이트가 아닌 구조체의 배열이 전체적으로 페이지 크기를 초과하는 경우 등에 문제가 발생할 수 있었다. 또한, 대량의 데이터를 메모리 간에 전송할 경우, 뱅크 전환을 하면서 전송하는 처리가 필요했는데, 이 과정은 상당히 번거로웠다.

CPU 주소 외에 페이지 전환용 레지스터가 필요했는데, 이 레지스터는 적어도 논리적(소프트웨어적)으로는 CPU 외부에 있는 것이 일반적이었다 (HD64180처럼 CPU 칩 내부에 이 페이지 전환용 레지스터를 가진 칩도 있었지만, 프로그래밍상으로는 CPU 내부의 레지스터로 취급되지 않았다)[7]。 이는 주소를 CPU 내부 레지스터와 페이지 전환용 레지스터 두 곳에서 별도로 관리해야 함을 의미했고, CPU 내부 레지스터에서 페이지 레지스터로의 자리 올림 등의 하드웨어가 구현되지 않았기 때문에, 배열 등이 페이지 크기보다 큰 경우에는 소프트웨어로 페이지를 관리해야 했다.[8]

이러한 소프트웨어 처리는 속도 저하를 야기했으며, 소프트웨어에 버그가 숨어있을 가능성이 생겨 시스템의 신뢰성 저하를 초래했다. 뱅크 전환용 레지스터의 사양(접속된 I/O 주소 등)은 CPU가 동일하더라도, 일반적인 경우 기종마다 달랐기 때문에, 동일 CPU이면서 비호환이 되는 원인 중 하나가 되었다.

이후 뱅크 전환은 16비트 시스템에서 세그멘테이션으로 대체되었고, 이는 다시 페이징 메모리 관리 장치(MMU)로 이어졌다. 그러나 임베디드 시스템에서는 단순성, 저렴한 비용, 그리고 범용 컴퓨팅보다 해당 환경에 더 잘 적용된다는 장점 때문에 뱅크 전환이 여전히 사용된다.

9. 한국에서의 뱅크 전환

8비트 컴퓨터 시대에는 Z80, 6502와 같은 8비트 마이크로프로세서의 16비트 메모리 주소 제한으로 인해 최대 64KB의 메모리만 사용할 수 있었다. 64KB 이상의 메모리를 사용하기 위해 메모리를 64KB 뱅크(또는 페이지)로 분할하여 뱅크를 전환하는 방식으로 더 큰 메모리 사용이 가능하게 되었다.[6]

이러한 구조는 메모리 맵 I/O와 조합되어 발전하였고, MSX에는 네 개의 공간을 "슬롯"으로 취급하는 구조가 구현되었다. 이는 하드웨어 I/O와 제어 프로그램의 접속 및 경합을 방지하기 위한 것이었으나, 메모리 공간에 접속되는 주소 간 이동이 불가능하여 배치에 제한이 있었다. 이후 MB-S1, FM-77, MZ-2500 등에는 메모리를 페이지 단위로 공간에 할당하는 원시적인 메모리 관리 유닛이 내장되어 더 자유로운 배치가 가능해졌다. MSX에서도 주소와 조합 제한을 피하기 위해 MSX2에서 메모리 맵퍼라는 구조가 추가되었다.

패밀리 컴퓨터는 뱅크 전환 기능이 없었지만, 롬 카트리지에 컨트롤러(가상 롬 컨트롤러 등)를 탑재하여 뱅크 전환을 구현했다. 이를 통해 대용량 ROM 카트리지를 다루는 기법이 확립되어, 읽기 속도가 느린 디스크 시스템이 쇠퇴하고 카트리지가 더 대용량이 되었다. 게임보이 카트리지에는 MBC (Memory Bank Controller)라는 칩이 사용되었으며, ROM 뱅크 전환뿐만 아니라 카트리지 내 SRAM 뱅크 전환, 적외선 링크 등 주변 기기 접근도 제공했다.

NECPC-9801 및 후속 기종은 16비트 마이크로프로세서인 인텔 8086 및 그 상위 호환 CPU를 채용했지만, 주소 공간이 1MB밖에 없었다. 애플리케이션 등의 메모리 요구량 증가에 따라, EMS의 국내 보급에 앞서 '뱅크 메모리'가 개발되었다.[12] 각 주변 기기 제조사에서 독자 규격의 뱅크 전환용 메모리를 발매했고, 대응 애플리케이션이나 게임 등도 일부 발매되었다. 그 후, 아이・오・데이터 기기(I-O DATA)가 제창한 "I/O 뱅크 방식"에 의한 뱅크 전환 메모리 관리 '''BMS'''(Bank Memory Specification)가 제정되어, 복수 애플리케이션 간의 경합을 피하는 메모리 관리가 이루어졌다.[12] 뱅크 메모리뿐만 아니라 하드웨어 EMS/프로텍트 메모리에도 겸용할 수 있는 제품도 있었다.

9. 1. 8비트 컴퓨터 시대

Z80, 6502와 같은 8비트 마이크로프로세서는 16비트 메모리 주소를 사용하여 최대 64KB의 메모리 공간에만 접근할 수 있었다. 따라서 64KB 이상의 메모리를 탑재하는 8비트 시스템에서는 메모리를 64KB 뱅크(또는 페이지)로 분할하여 사용했다. 뱅크를 전환함으로써 64KB 이상의 메모리를 사용할 수 있었다.[6]

이러한 구조는 발전을 거쳐 메모리 맵 I/O와 조합되었고, MSX에는 네 개의 공간을 "슬롯"으로 취급하는 구조가 구현되었다. 이는 하드웨어 I/O와 제어 프로그램의 접속 및 경합을 방지하기 위한 것이었다. 그러나 메모리 공간에 접속되는 주소 간 이동이 불가능하여 배치에 제한이 있었다.

이후 MB-S1, FM-77, MZ-2500 등에는 메모리를 페이지 단위로 공간에 할당하는 원시적인 메모리 관리 유닛이 내장되어 더 자유로운 배치가 가능해졌다. MSX에서도 주소와 조합 제한을 피하기 위해 MSX2에서 메모리 맵퍼라는 구조가 추가되었다.

1982년 CP/M 최종 버전에서는 8080이나 Z80에서 64KB 이상의 메모리를 사용할 수 있도록 뱅크 전환을 지원했다.[9]

패밀리 컴퓨터는 뱅크 전환 기능이 없었지만, 롬 카트리지에 컨트롤러(가상 롬 컨트롤러 등)를 탑재하여 뱅크 전환을 구현했다. 이를 통해 대용량 ROM 카트리지를 다루는 기법이 확립되어, 읽기 속도가 느린 디스크 시스템이 쇠퇴하고 카트리지가 더 대용량이 되었다. 게임보이 카트리지에는 MBC (Memory Bank Controller)라는 칩이 사용되었으며, ROM 뱅크 전환뿐만 아니라 카트리지 내 SRAM 뱅크 전환, 적외선 링크 등 주변 기기 접근도 제공했다.

9. 2. PC-9801 호환 기종

NECPC-9801 및 후속 기종은 16비트 마이크로프로세서인 인텔 8086 및 그 상위 호환 CPU를 채용했지만, 주소 공간이 1MB밖에 없었다. 애플리케이션 등의 메모리 요구량 증가에 따라, EMS의 국내 보급에 앞서 뱅크 전환용 메모리인 '뱅크 메모리'가 개발되었다.[12] 각 주변 기기 제조사에서 독자 규격의 뱅크 전환용 메모리를 발매했고, 대응 애플리케이션이나 게임 등도 일부 발매되었다. 그 후, 아이・오・데이터 기기(I-O DATA)가 제창한 "I/O 뱅크 방식"에 의한 뱅크 전환 메모리 관리 '''BMS'''(Bank Memory Specification)가 제정되어, 복수 애플리케이션 간의 경합을 피하는 메모리 관리가 이루어졌다.[12] 뱅크 메모리뿐만 아니라 하드웨어 EMS/프로텍트 메모리에도 겸용할 수 있는 제품도 있었다.

9. 3. 기타

읽기 뱅크와 쓰기 뱅크를 별도로 지정하는 방식(Read Modify Write)은 이미지 처리에 응용되었다.[6] 모토로라 MC68000 시리즈는 부팅 시 뱅크 전환을 통해 스택 포인터와 부트스트랩 주소를 제공했다.

참조

[1] 서적 Control Data 160-A Computer Programming Manual http://bitsavers.org[...] CDC 1963-03
[2] 서적 Control Data 3600 Computer System Reference Manual http://bitsavers.org[...] CDC
[3] 문서 ページングと呼ばれることもある。
[4] 서적 The Microprocessor and its application: an advanced course CUP Archive 1978
[5] 서적 Computer structures: readings and examples Mc Graw Hill 1971
[6] 문서 メモリ空間が64KiBなのに対し、[[PC-8800シリーズ#歴史|PC-8801]]に代表される640×200ピクセルという当時の標準的な解像度では1プレーン当たり16KiB弱、カラー表示の場合RGBの3プレーンで、48KiB弱という空間を必要とした。一方、[[FM-8#概要|FM-8]]のように、I/O空間を使用したり、サブプロセッサに処理を委譲する実装もあり、その場合はその限りではない。
[7] 서적 Embedded systems design Newnes 2003
[8] 서적 Upgrading and Repairing PCs Que Books 1992
[9] 뉴스 Digital Research offers CP/M upgrade Info World 1982-10-25
[10] 서적 American inventors, entrepreneurs & business visionaries Infobase Publishing 2002
[11] 서적 Hardware hacking: have fun while voiding your warranty Syngress 2004
[12] 간행물 バンク切り換え、バンクメモリー方式 ピクニック企画 1990-03-01
[13] 뉴스 New 1-2-3 Gets 4 Megabytes of Memory, Lotus, Intel Break PC-DOS Memory Barrier InfoWorld 1985-04-29
[14] 뉴스 EMS Update Gives DOS Improved Multitasking InfoWorld 1987-08-17
[15] 서적 The Handbook of Software for Engineers and Scientists CRC Press 1995



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com